๊ณ ๊ธ ํ์ ์ํ๊ณผ ์ปค๋ฆฌ-ํ์๋ ๋์์ด ์ํํธ์จ์ด๋ฅผ ํ์ ํ์ฌ ์ํ์ ํ์ค์ฑ์ผ๋ก ์ฆ๋ช ๊ฐ๋ฅํ ์ ํํ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์ธ์.
๊ณ ๊ธ ํ์ ์ํ: ์ฝ๋, ๋ ผ๋ฆฌ, ์ฆ๋ช ์ด ๊ถ๊ทน์ ์ธ ์์ ์ ์ํด ์๋ ดํ๋ ๊ณณ
์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ธ๊ณ์์ ๋ฒ๊ทธ๋ ๋์์์ด ๋ฐ์ํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋๋ ํ์ค์ ๋๋ค. ์ฌ์ํ ๊ฒฐํจ๋ถํฐ ์น๋ช ์ ์ธ ์์คํ ์ค๋ฅ์ ์ด๋ฅด๊ธฐ๊น์ง ์ฝ๋์ ์ค๋ฅ๋ ์์ฉ๋์ง๋ง ๋ถ๋ง์ค๋ฌ์ด ํ๋ก์ธ์ค์ ์ผ๋ถ๊ฐ ๋์์ต๋๋ค. ์์ญ ๋ ๋์ ์ด์ ๋ํ ์ฐ๋ฆฌ์ ์ฃผ์ ๋ฌด๊ธฐ๋ ํ ์คํ ์ด์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ๋ฒ๊ทธ์ ๋๋ฌํ๊ธฐ ์ ์ ๋ฒ๊ทธ๋ฅผ ์ก๊ธฐ ์ํด ์ ๋ ํ ์คํธ, ํตํฉ ํ ์คํธ ๋ฐ ์๋ ํฌ ์๋ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ ์คํ ์๋ ๊ทผ๋ณธ์ ์ธ ํ๊ณ๊ฐ ์์ต๋๋ค. ๋ฒ๊ทธ์ ์กด์ฌ๋ ๋ณด์ฌ์ค ์ ์์ง๋ง ๋ฒ๊ทธ๊ฐ ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค ์๋ ์์ต๋๋ค.
์ด ํจ๋ฌ๋ค์์ ๋ฐ๊ฟ ์ ์๋ค๋ฉด ์ด๋จ๊น์? ์ค๋ฅ๋ฅผ ํ ์คํธํ๋ ๋์ ์ํ์ ์ ๋ฆฌ์ ๋์ผํ ์๊ฒฉํจ์ผ๋ก ์ํํธ์จ์ด๊ฐ ์ ํํ๊ณ ์ ์ฒด ํด๋์ค์ ๋ฒ๊ทธ๊ฐ ์๋์ง ์ฆ๋ช ํ ์ ์๋ค๋ฉด ์ด๋จ๊น์? ์ด๊ฒ์ ๊ณต์ ๊ณผํ ์์ค์ด ์๋๋๋ค. ์ด๊ฒ์ ๊ณ ๊ธ ํ์ ์ด๋ก ์ผ๋ก ์๋ ค์ง ์ปดํจํฐ ๊ณผํ, ๋ ผ๋ฆฌ ๋ฐ ์ํ์ ๊ต์ฐจ์ ์ ์๋ ๋ถ์ผ์ ์ฝ์์ ๋๋ค. ์ด ๋ถ์ผ๋ ๊ธฐ์กด ๋ฐฉ๋ฒ์ผ๋ก๋ ์์ํ ์ ์๋ ์์ค์ ์ํํธ์จ์ด ๋ณด์ฆ์ธ '์ฆ๋ช ํ์ ์์ ์ฑ'์ ๊ตฌ์ถํ๊ธฐ ์ํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ๊ธฐ์ฌ๋ ์ด๋ก ์ ๊ธฐ์ด์์ ์ค์ ์์ฉ์ ์ด๋ฅด๊ธฐ๊น์ง ์ด ๋งคํน์ ์ธ ์ธ๊ณ๋ฅผ ์๋ดํ์ฌ ์ํ์ ์ฆ๋ช ์ด ํ๋์ ์ธ ๊ณ ์ ๋ขฐ์ฑ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํ์์ ์ธ ๋ถ๋ถ์ด ๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
๋จ์ํ ๊ฒ์ฌ์์ ๋ ผ๋ฆฌ์ ํ๋ช ์ผ๋ก: ๊ฐ๋ตํ ์ญ์ฌ
๊ณ ๊ธ ํ์
์ ํ์ ์ดํดํ๋ ค๋ฉด ๋จผ์ ๋จ์ ํ์
์ ์ญํ ์ ์ดํดํด์ผ ํฉ๋๋ค. Java, C# ๋๋ TypeScript์ ๊ฐ์ ์ธ์ด์์ ํ์
(int, string, bool)์ ๊ธฐ๋ณธ์ ์ธ ์์ ๋ง ์ญํ ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ซ์๋ฅผ ๋ฌธ์์ด์ ์ถ๊ฐํ๊ฑฐ๋ ๋ถ์ธ์ด ์์๋๋ ๊ณณ์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๊ฒ์ ์ ์ ํ์
๊ฒ์ฌ์ด๋ฉฐ ์ปดํ์ผ ์ ์๋นํ ์์ ์ฌ์ํ ์ค๋ฅ๋ฅผ ์ก์๋
๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ๋จ์ ํ์
์ ์ ํ์ ์
๋๋ค. ๊ทธ๋ค์ ๊ทธ๋ค์ด ํฌํจํ๋ ๊ฐ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ชจ๋ฆ
๋๋ค. get(index: int, list: List)์ ๊ฐ์ ํจ์์ ๋ํ ํ์
์๋ช
์ ์
๋ ฅ์ ํ์
์ ์๋ ค์ฃผ์ง๋ง ๊ฐ๋ฐ์๊ฐ ์์ ์ธ๋ฑ์ค ๋๋ ์ฃผ์ด์ง ๋ชฉ๋ก์ ๋ํ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋ง์ ์๋ ์์ต๋๋ค. ์ด๋ IndexOutOfBoundsException๊ณผ ๊ฐ์ ๋ฐํ์ ์์ธ๋ฅผ ๋ฐ์์ํค๋ฉฐ ์ด๋ ์ผ๋ฐ์ ์ธ ์ถฉ๋ ์์ธ์
๋๋ค.
๋ ผ๋ฆฌ์ ์ปดํจํฐ ๊ณผํ์ ์ ๊ตฌ์์ธ Alonzo Church(๋๋ค ๊ณ์ฐ๋ฒ)์ Haskell Curry(์กฐํฉ ๋ ผ๋ฆฌ)๊ฐ ์ํ์ ๋ ผ๋ฆฌ์ ๊ณ์ฐ ๊ฐ์ ์ฌ์คํ ์ฐ๊ฒฐ์ ํ๊ตฌํ๊ธฐ ์์ํ์ ๋ ํ๋ช ์ด ์์๋์์ต๋๋ค. ๊ทธ๋ค์ ์ฐ๊ตฌ๋ ํ๋ก๊ทธ๋๋ฐ์ ์์ํ ๋ฐ๊ฟ ์ฌ์คํ ๊นจ๋ฌ์์ ์ํ ํ ๋๋ฅผ ๋ง๋ จํ์ต๋๋ค.
์ด์: ์ปค๋ฆฌ-ํ์๋ ๋์
์ฆ๋ช ํ์ ์์ ์ฑ์ ํต์ฌ์ ์ปค๋ฆฌ-ํ์๋ ๋์(proposition-as-types ๋ฐ proofs-as-programs ์๋ฆฌ๋ผ๊ณ ๋ ํจ)์ผ๋ก ์๋ ค์ง ๊ฐ๋ ฅํ ๊ฐ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ ผ๋ฆฌ์ ๊ณ์ฐ ๊ฐ์ ์ง์ ์ ์ด๊ณ ๊ณต์์ ์ธ ๋ฑ๊ฐ์ฑ์ ์ค์ ํฉ๋๋ค. ํต์ฌ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ช ์ํฉ๋๋ค.
- ๋ ผ๋ฆฌ์ ๋ช ์ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ์ ์ ํด๋นํฉ๋๋ค.
- ํด๋น ๋ช ์ ์ ์ฆ๋ช ์ ํด๋น ํ์ ์ ํ๋ก๊ทธ๋จ(๋๋ ํญ)์ ํด๋นํฉ๋๋ค.
์ด๊ฒ์ ์ถ์์ ์ผ๋ก ๋ค๋ฆด ์ ์์ผ๋ฏ๋ก ๋น์ ๋ก ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ ผ๋ฆฌ์ ๋ช ์ ์ธ "ํค(๋ช ์ A)๋ฅผ ์ฃผ์๋ฉด ์๋์ฐจ(๋ช ์ B)์ ๋ํ ์ ๊ทผ ๊ถํ์ ๋๋ฆด ์ ์์ต๋๋ค."๋ฅผ ์์ํด ๋ณด์ญ์์ค.
ํ์
์ ์ธ๊ณ์์ ์ด๊ฒ์ ํจ์ ์๋ช
์ธ openCar(key: Key): Car๋ก ๋ณํ๋ฉ๋๋ค. Key ํ์
์ ๋ช
์ A์ ํด๋นํ๊ณ Car ํ์
์ ๋ช
์ B์ ํด๋นํฉ๋๋ค. `openCar` ํจ์ ์์ฒด๋ ์ฆ๋ช
์
๋๋ค. ์ด ํจ์๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์์ฑ(ํ๋ก๊ทธ๋จ ๊ตฌํ)ํ๋ฉด Key๊ฐ ์ฃผ์ด์ง๋ฉด ์ค์ ๋ก Car๋ฅผ ์์ฑํ ์ ์์์ ๊ตฌ์ฑ์ ์ผ๋ก ์ฆ๋ช
ํ ๊ฒ์
๋๋ค.
์ด ๋์์ ๋ชจ๋ ๋ ผ๋ฆฌ์ ์ฐ๊ฒฐ์ด๋ก ์๋ฆ๋ต๊ฒ ํ์ฅ๋ฉ๋๋ค.
- ๋
ผ๋ฆฌ์ AND (A โง B): ์ด๊ฒ์ ๊ณฑ ํ์
(ํํ ๋๋ ๋ ์ฝ๋)์ ํด๋นํฉ๋๋ค. A AND B๋ฅผ ์ฆ๋ช
ํ๋ ค๋ฉด A์ ์ฆ๋ช
๊ณผ B์ ์ฆ๋ช
์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ํ๋ก๊ทธ๋๋ฐ์์
(A, B)ํ์ ์ ๊ฐ์ ๋ง๋ค๋ ค๋ฉดAํ์ ์ ๊ฐ๊ณผBํ์ ์ ๊ฐ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. - ๋
ผ๋ฆฌ์ OR (A โจ B): ์ด๊ฒ์ ํฉ ํ์
(ํ๊ทธ๋ ๊ณต์ฉ์ฒด ๋๋ ์ด๊ฑฐํ)์ ํด๋นํฉ๋๋ค. A OR B๋ฅผ ์ฆ๋ช
ํ๋ ค๋ฉด A์ ์ฆ๋ช
๋๋ B์ ์ฆ๋ช
์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ํ๋ก๊ทธ๋๋ฐ์์
Eitherํ์ ์ ๊ฐ์Aํ์ ์ ๊ฐ ๋๋Bํ์ ์ ๊ฐ์ ๋ณด์ ํ์ง๋ง ๋ ๋ค๋ ์๋๋๋ค. - ๋ ผ๋ฆฌ์ ํจ์ถ (A โ B): ๋ณด์๋ฏ์ด ์ด๊ฒ์ ํจ์ ํ์ ์ ํด๋นํฉ๋๋ค. "A๋ B๋ฅผ ์๋ฏธํจ"์ ์ฆ๋ช ์ A์ ์ฆ๋ช ์ B์ ์ฆ๋ช ์ผ๋ก ๋ณํํ๋ ํจ์์ ๋๋ค.
- ๋ ผ๋ฆฌ์ ๊ฑฐ์ง (โฅ): ์ด๊ฒ์ ๋น ํ์ (์ข ์ข `Void` ๋๋ `Never`๋ผ๊ณ ํจ)์ ํด๋นํ๋ฉฐ ๊ฐ์ ๋ง๋ค ์ ์๋ ํ์ ์ ๋๋ค. `Void`๋ฅผ ๋ฐํํ๋ ํจ์๋ ๋ชจ์์ ๋ํ ์ฆ๋ช ์ ๋๋ค. ์ฆ, ์ค์ ๋ก ๋ฐํํ ์ ์๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์ ๋ ฅ์ด ๋ถ๊ฐ๋ฅํจ์ ์ฆ๋ช ํฉ๋๋ค.
ํจ์ถ์ ๋๋์ต๋๋ค. ์ถฉ๋ถํ ๊ฐ๋ ฅํ ํ์ ์์คํ ์์ ์ ์ ๋ ฅ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ ๊ณต์์ ์ด๊ณ ๊ธฐ๊ณ ๊ฒ์ฌ๋ ์ํ์ ์ฆ๋ช ์ ์์ฑํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ ์ฆ๋ช ๊ฒ์ฌ๊ธฐ๊ฐ ๋ฉ๋๋ค. ํ๋ก๊ทธ๋จ์ด ์ปดํ์ผ๋๋ฉด ์ฆ๋ช ์ด ์ ํจํฉ๋๋ค.
์์กด ํ์ ์๊ฐ: ํ์ ์ ๊ฐ์ ํ
์ปค๋ฆฌ-ํ์๋ ๋์์ ์์กด ํ์ ์ ๋์ ์ผ๋ก ์ง์ ์ผ๋ก ๋ณํ์ ์ด ๋ฉ๋๋ค. ์์กด ํ์ ์ ๊ฐ์ ์์กดํ๋ ํ์ ์ ๋๋ค. ์ด๊ฒ์ ํ์ ์์คํ ์์ ํ๋ก๊ทธ๋จ์ ๋ํ ๋ฏฟ์ ์ ์์ ์ ๋๋ก ํ๋ถํ๊ณ ์ ํํ ์์ฑ์ ์ง์ ํํํ ์ ์๋๋ก ํ๋ ์ค์ํ ๋์ฝ์ ๋๋ค.
๋ชฉ๋ก ์์ ๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ธฐ์กด ํ์
์์คํ
์์ List ํ์
์ ๋ชฉ๋ก์ ๊ธธ์ด๋ฅผ ์์ง ๋ชปํฉ๋๋ค. ์์กด ํ์
์ผ๋ก Vect n A์ ๊ฐ์ ํ์
์ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ํ์
์ ๊ธธ์ด๊ฐ ์ธ์ฝ๋ฉ๋ '๋ฒกํฐ'(ํ์
์ด `A`์ธ ์์๋ฅผ ํฌํจํ๊ณ ์ปดํ์ผ ์๊ฐ ์๋ ค์ง ๊ธธ์ด๊ฐ `n`์ธ ๋ชฉ๋ก)๋ฅผ ๋ํ๋
๋๋ค.
๋ค์ ํ์ ์ ๊ณ ๋ คํ์ญ์์ค.
Vect 0 Int: ์ ์์ ๋น ๋ฒกํฐ์ ํ์ ์ ๋๋ค.Vect 3 String: ์ ํํ ์ธ ๊ฐ์ ๋ฌธ์์ด์ ํฌํจํ๋ ๋ฒกํฐ์ ํ์ ์ ๋๋ค.Vect (n + m) A: ๊ธธ์ด๊ฐ ๋ค๋ฅธ ๋ ์ซ์ `n`๊ณผ `m`์ ํฉ์ธ ๋ฒกํฐ์ ํ์ ์ ๋๋ค.
์ค์ฉ์ ์ธ ์: ์์ ํ `head` ํจ์
๋ฐํ์ ์ค๋ฅ์ ๊ณ ์ ์ ์ธ ์์ธ์ ๋น ๋ชฉ๋ก์ ์ฒซ ๋ฒ์งธ ์์(`head`)๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํ๋ ๊ฒ์ ๋๋ค. ์์กด ํ์ ์ด ์ด ๋ฌธ์ ๋ฅผ ์์ค์์ ์ด๋ป๊ฒ ์ ๊ฑฐํ๋์ง ์ดํด๋ด ์๋ค. ๋ฒกํฐ๋ฅผ ๊ฐ์ ธ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ ํจ์ `head`๋ฅผ ์์ฑํ๋ ค๊ณ ํฉ๋๋ค.
์ฆ๋ช ํ๋ ค๋ ๋ ผ๋ฆฌ์ ๋ช ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. "๋ชจ๋ ํ์ A์ ๋ชจ๋ ์์ฐ์ n์ ๋ํด ๊ธธ์ด๊ฐ `n+1`์ธ ๋ฒกํฐ๋ฅผ ์ฃผ์๋ฉด ํ์ A์ ์์๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค." ๊ธธ์ด๊ฐ `n+1`์ธ ๋ฒกํฐ๋ ๋น์ด ์์ง ์์์ด ๋ณด์ฅ๋ฉ๋๋ค.
Idris์ ๊ฐ์ ์์กด ํ์ ์ธ์ด์์ ํ์ ์๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค(๋ช ํ์ฑ์ ์ํด ๋จ์ํ๋จ).
head : (n : Nat) -> Vect (1 + n) a -> a
์ด ์๋ช ์ ํด๋ถํด ๋ณด๊ฒ ์ต๋๋ค.
(n : Nat): ํจ์๋ ์์ฐ์ `n`์ ์์์ ์ธ์๋ก ์ฌ์ฉํฉ๋๋ค.Vect (1 + n) a: ๊ทธ๋ฐ ๋ค์ ๊ธธ์ด๊ฐ ์ปดํ์ผ ์ `1 + n`(์ฆ, ์ต์ํ 1)์ธ ๊ฒ์ผ๋ก ์ฆ๋ช ๋ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.a: ํ์ `a`์ ๊ฐ์ ๋ฐํํ๋๋ก ๋ณด์ฅ๋ฉ๋๋ค.
์ด์ ์ด ํจ์๋ฅผ ๋น ๋ฒกํฐ๋ก ํธ์ถํ๋ ค๊ณ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ๋น ๋ฒกํฐ์ ํ์
์ Vect 0 a์
๋๋ค. ์ปดํ์ผ๋ฌ๋ Vect 0 a ํ์
์ ํ์ํ ์
๋ ฅ ํ์
Vect (1 + n) a์ ์ผ์น์ํค๋ ค๊ณ ์๋ํฉ๋๋ค. ์์ฐ์ `n`์ ๋ํด ๋ฐฉ์ ์ 0 = 1 + n์ ํ๋ ค๊ณ ์๋ํฉ๋๋ค. ์ด ๋ฐฉ์ ์์ ๋ง์กฑํ๋ ์์ฐ์ `n`์ด ์์ผ๋ฏ๋ก ์ปดํ์ผ๋ฌ๋ ํ์
์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค. ํ๋ก๊ทธ๋จ์ด ์ปดํ์ผ๋์ง ์์ต๋๋ค.
ํ์ ์์คํ ์ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ด ๋น ๋ชฉ๋ก์ ํค๋์ ์ก์ธ์คํ๋ ค๊ณ ์๋ํ์ง ์์์ ์ฆ๋ช ํ์ต๋๋ค. ์ด ์ ์ฒด ํด๋์ค์ ๋ฒ๊ทธ๋ ํ ์คํ ์ด ์๋ ์ปดํ์ผ๋ฌ์์ ํ์ธํ ์ํ์ ์ฆ๋ช ์ผ๋ก ๊ทผ์ ๋ฉ๋๋ค.
์ค์ ์ฆ๋ช ๋์ฐ๋ฏธ: Coq, Agda ๋ฐ Idris
์ด๋ฌํ ์์ด๋์ด๋ฅผ ๊ตฌํํ๋ ์ธ์ด์ ์์คํ ์ ์ข ์ข "์ฆ๋ช ๋์ฐ๋ฏธ" ๋๋ "๋ํํ ์ ๋ฆฌ ์ฆ๋ช ๊ธฐ"๋ผ๊ณ ํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ํ๋ก๊ทธ๋จ๊ณผ ์ฆ๋ช ์ ํจ๊ป ์์ฑํ ์ ์๋ ํ๊ฒฝ์ ๋๋ค. ์ด ๊ณต๊ฐ์์ ๊ฐ์ฅ ๋์ ๋๋ ์ธ ๊ฐ์ง ์๋ Coq, Agda ๋ฐ Idris์ ๋๋ค.
Coq
ํ๋์ค์์ ๊ฐ๋ฐ๋ Coq๋ ๊ฐ์ฅ ์ฑ์ํ๊ณ ์ ํฌ ํ ์คํธ๋ฅผ ๊ฑฐ์น ์ฆ๋ช ๋์ฐ๋ฏธ ์ค ํ๋์ ๋๋ค. Calculus of Inductive Constructions๋ผ๋ ๋ ผ๋ฆฌ์ ํ ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค. Coq๋ ์ ํ์ฑ์ด ๊ฐ์ฅ ์ค์ํ ์ฃผ์ ํ์ ๊ฒ์ฆ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ์ ๋ช ํฉ๋๋ค. ๊ฐ์ฅ ์ ๋ช ํ ์ฑ๊ณต ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Four Color Theorem: ์์ผ๋ก ํ์ธํ๊ธฐ๊ฐ ์ ๋ช ๋์ ์ ๋๋ก ์ด๋ ค์ ๋ ์ ๋ช ํ ์ํ ์ ๋ฆฌ์ ๊ณต์ ์ฆ๋ช ์ ๋๋ค.
- CompCert: Coq์์ ๊ณต์์ ์ผ๋ก ๊ฒ์ฆ๋ C ์ปดํ์ผ๋ฌ์ ๋๋ค. ์ฆ, ์ปดํ์ผ๋ ์คํ ์ฝ๋๊ฐ ์์ค C ์ฝ๋์ ์ง์ ๋ ๋๋ก ์ ํํ๊ฒ ๋์ํ๋ค๋ ๊ธฐ๊ณ ๊ฒ์ฌ ์ฆ๋ช ์ด ์์ด ์ปดํ์ผ๋ฌ์์ ๋์ ๋ ๋ฒ๊ทธ์ ์ํ์ ์ ๊ฑฐํฉ๋๋ค. ์ด๊ฒ์ ์ํํธ์จ์ด ์์ง๋์ด๋ง์์ ๊ธฐ๋ ๋น์ ์ธ ์ ์ ์ ๋๋ค.
Coq๋ ํํ๋ ฅ๊ณผ ์๊ฒฉํจ์ผ๋ก ์ธํด ์๊ณ ๋ฆฌ์ฆ, ํ๋์จ์ด ๋ฐ ์ํ ์ ๋ฆฌ๋ฅผ ๊ฒ์ฆํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
Agda
์ค์จ๋ด์ Chalmers University of Technology์์ ๊ฐ๋ฐ๋ Agda๋ ์์กด ํ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฐ ์ฆ๋ช ๋์ฐ๋ฏธ์ ๋๋ค. Martin-Lรถf ํ์ ์ด๋ก ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. Agda๋ ์ํ์ ํ๊ธฐ๋ฒ๊ณผ ์ ์ฌํ๋๋ก ์ ๋์ฝ๋๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ๊น๋ํ ๊ตฌ๋ฌธ์ผ๋ก ์ ๋ช ํ์ฌ ์ํ์ ๋ฐฐ๊ฒฝ์ด ์๋ ์ฌ๋๋ค์ด ์ฆ๋ช ์ ๋ ์ฝ๊ฒ ์ฝ์ ์ ์์ต๋๋ค. ํ์ ์ด๋ก ๊ณผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋์์ธ์ ์ต์ ์ ์ ํ๊ตฌํ๊ธฐ ์ํด ํ์ ์ฐ๊ตฌ์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
Idris
์๊ตญ St Andrews University์์ ๊ฐ๋ฐ๋ Idris๋ ํน์ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ์ค๊ณ๋์์ต๋๋ค. ์์กด ํ์ ์ ์ค์ฉ์ ์ด๊ณ ๋ฒ์ฉ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ฌ์ ํ ๊ฐ๋ ฅํ ์ฆ๋ช ๋์ฐ๋ฏธ์ด์ง๋ง ๊ตฌ๋ฌธ์ Haskell๊ณผ ๊ฐ์ ์ต์ ํจ์ํ ์ธ์ด์ ๋ ์ ์ฌํฉ๋๋ค. Idris๋ ๊ฐ๋ฐ์๊ฐ ํ์ ์๋ช ์ ์์ฑํ๊ณ ์ปดํ์ผ๋ฌ๊ฐ ์ฌ๋ฐ๋ฅธ ๊ตฌํ์ ์๋ดํ๋ ๋ฐ ๋์์ด ๋๋ ๋ํํ ์ํฌํ๋ก์ธ ํ์ ๊ธฐ๋ฐ ๊ฐ๋ฐ๊ณผ ๊ฐ์ ๊ฐ๋ ์ ๋์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด Idris์์๋ ์ฝ๋์ ํน์ ๋ถ๋ถ์์ ํ์ ํํ์์ ํ์ ์ด ๋ฌด์์ธ์ง ์ปดํ์ผ๋ฌ์ ๋ฌป๊ฑฐ๋ ํน์ ๊ตฌ๋ฉ์ ์ฑ์ธ ์ ์๋ ํจ์๋ฅผ ๊ฒ์ํ๋๋ก ์์ฒญํ ์๋ ์์ต๋๋ค. ์ด ๋ํํ ํน์ฑ์ ์ง์ ์ฅ๋ฒฝ์ ๋ฎ์ถ๊ณ ์ฆ๋ช ๊ฐ๋ฅํ ์ ํํ ์ํํธ์จ์ด๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ฐ๋ฐ์์ ์ปดํ์ผ๋ฌ ๊ฐ์ ๋ณด๋ค ํ๋ ฅ์ ์ธ ํ๋ก์ธ์ค๋ก ๋ง๋ญ๋๋ค.
์: Idris์์ ๋ชฉ๋ก ์ถ๊ฐ ID ์ฆ๋ช
๊ฐ๋จํ ์์ฑ์ ์ฆ๋ช ํด ๋ณด๊ฒ ์ต๋๋ค. ๋น ๋ชฉ๋ก์ ๋ชจ๋ ๋ชฉ๋ก `xs`์ ์ถ๊ฐํ๋ฉด `xs`๊ฐ ๋ฉ๋๋ค. ์ ๋ฆฌ๋ `append(xs, []) = xs`์ ๋๋ค.
Idris์์ ์ฆ๋ช ์ ํ์ ์๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
appendNilRightNeutral : (xs : List a) -> append xs [] = xs
์ด๊ฒ์ ๋ชจ๋ ๋ชฉ๋ก `xs`์ ๋ํด `append xs []`๊ฐ `xs`์ ๊ฐ๋ค๋ ์ฆ๋ช (๋ฑ๊ฐ ํ์ ์ ๊ฐ)์ ๋ฐํํ๋ ํจ์์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ท๋ฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด ํจ์๋ฅผ ๊ตฌํํ๊ณ Idris ์ปดํ์ผ๋ฌ๋ ๋ชจ๋ ๋จ๊ณ๋ฅผ ํ์ธํฉ๋๋ค. ์ปดํ์ผ๋๋ฉด ์ ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๋ชจ๋ ๋ชฉ๋ก์ ๋ํด ์ฆ๋ช ๋ฉ๋๋ค.
์ค์ ์์ฉ ๋ฐ ๊ธ๋ก๋ฒ ์ํฅ
์ด๊ฒ์ด ํ๋ฌธ์ ์ผ๋ก ๋ณด์ผ ์ ์์ง๋ง ์ฆ๋ช ํ์ ์์ ์ฑ์ ์ํํธ์จ์ด ์ค๋ฅ๊ฐ ํ์ฉ๋์ง ์๋ ์ฐ์ ์ ํฐ ์ํฅ์ ๋ฏธ์น๊ณ ์์ต๋๋ค.
- ํญ๊ณต ์ฐ์ฃผ ๋ฐ ์๋์ฐจ: ๋นํ ์ ์ด ์ํํธ์จ์ด๋ ์์จ ์ฃผํ ์์คํ ์ ๊ฒฝ์ฐ ๋ฒ๊ทธ๋ ์น๋ช ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ถ๋ฌธ์ ํ์ฌ๋ ์ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํ์ฑ์ ํ์ธํ๊ธฐ ์ํด Coq์ ๊ฐ์ ํ์์ ๋ฐฉ๋ฒ๊ณผ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ํธํํ ๋ฐ ๋ธ๋ก์ฒด์ธ: Ethereum๊ณผ ๊ฐ์ ํ๋ซํผ์ ์ค๋งํธ ๊ณ์ฝ์ ์์ญ์ต ๋ฌ๋ฌ์ ์์ฐ์ ๊ด๋ฆฌํฉ๋๋ค. ์ค๋งํธ ๊ณ์ฝ์ ๋ฒ๊ทธ๋ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๋๋๋ฆด ์ ์๋ ๊ธ์ ์ ์์ค์ ์ด๋ํ ์ ์์ต๋๋ค. ํ์ ๊ฒ์ฆ์ ๊ณ์ฝ ๋ก์ง์ด ๊ฑด์ ํ๊ณ ๋ฐฐํฌ๋๊ธฐ ์ ์ ์ทจ์ฝ์ ์ด ์๋์ง ์ฆ๋ช ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฌ์ด๋ฒ ๋ณด์: ์ํธํ ํ๋กํ ์ฝ ๋ฐ ๋ณด์ ์ปค๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ณต์ ์ฆ๋ช ์ ์์คํ ์ ๋ฒํผ ์ค๋ฒํ๋ก ๋๋ ๊ฒฝ์ ์กฐ๊ฑด๊ณผ ๊ฐ์ ํน์ ์ ํ์ ๋ณด์ ํ์ ์ด ์์์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ์ปดํ์ผ๋ฌ ๋ฐ OS ๊ฐ๋ฐ: CompCert(์ปดํ์ผ๋ฌ) ๋ฐ seL4(๋ง์ดํฌ๋ก์ปค๋)์ ๊ฐ์ ํ๋ก์ ํธ๋ ์ ๋ก ์๋ ์์ค์ ๋ณด์ฆ์ผ๋ก ๊ธฐ๋ณธ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌ์ถํ ์ ์์์ ์ ์ฆํ์ต๋๋ค. seL4 ๋ง์ดํฌ๋ก์ปค๋์ ๊ตฌํ ์ ํ์ฑ์ ๋ํ ๊ณต์ ์ฆ๋ช ์ด ์์ด ์ธ๊ณ์์ ๊ฐ์ฅ ์์ ํ ์ด์ ์ฒด์ ์ปค๋ ์ค ํ๋์ ๋๋ค.
์ฆ๋ช ๊ฐ๋ฅํ ์ ํํ ์ํํธ์จ์ด์ ๊ณผ์ ์ ๋ฏธ๋
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์์กด ํ์ ๊ณผ ์ฆ๋ช ๋์ฐ๋ฏธ์ ์ฑํ์๋ ์ด๋ ค์์ด ๋ฐ๋ฆ ๋๋ค.
- ๊ฐํ๋ฅธ ํ์ต ๊ณก์ : ์์กด ํ์ ์ ๊ด์ ์์ ์๊ฐํ๋ ค๋ฉด ๊ธฐ์กด ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ๊ณ ๋ฐฉ์์ ์ ํํด์ผ ํฉ๋๋ค. ๋ง์ ๊ฐ๋ฐ์์๊ฒ ์ํ์ด ๋ ์ ์๋ ์์ค์ ์ํ์ ๋ฐ ๋ ผ๋ฆฌ์ ์๊ฒฉํจ์ด ํ์ํฉ๋๋ค.
- ์ฆ๋ช ๋ถ๋ด: ์ฆ๋ช ์ ์์ฑํ๋ ๋ฐ๋ ๊ธฐ์กด ์ฝ๋ ๋ฐ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ๊ตฌํ๋ฟ๋ง ์๋๋ผ ์ ํ์ฑ์ ๋ํ ๊ณต์์ ์ธ ์ฃผ์ฅ๋ ์ ๊ณตํด์ผ ํฉ๋๋ค.
- ๋๊ตฌ ๋ฐ ์ํ๊ณ ์ฑ์๋: Idris์ ๊ฐ์ ๋๊ตฌ๊ฐ ํฐ ๋ฐ์ ์ ์ด๋ฃจ๊ณ ์์ง๋ง ์ํ๊ณ(๋ผ์ด๋ธ๋ฌ๋ฆฌ, IDE ์ง์, ์ปค๋ฎค๋ํฐ ๋ฆฌ์์ค)๋ ์ฌ์ ํ Python ๋๋ JavaScript์ ๊ฐ์ ์ฃผ๋ฅ ์ธ์ด๋ณด๋ค ์ฑ์๋๊ฐ ๋ฎ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ฏธ๋๋ ๋ฐ์ต๋๋ค. ์ํํธ์จ์ด๊ฐ ์ฐ๋ฆฌ ์ถ์ ๋ชจ๋ ์ธก๋ฉด์ ๊ณ์ ์นจํฌํจ์ ๋ฐ๋ผ ๋ ๋์ ๋ณด์ฆ์ ๋ํ ์๊ตฌ๋ ๋์ฑ ์ปค์ง ๊ฒ์ ๋๋ค. ์์ผ๋ก ๋์๊ฐ ๊ธธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํฅ์๋ ์ธ์ฒด ๊ณตํ: ์ธ์ด์ ๋๊ตฌ๊ฐ ๋์ฑ ์ฌ์ฉ์ ์นํ์ ์ผ๋ก ์ ๊ณต๋๋ฉฐ ๋ ๋์ ์ค๋ฅ ๋ฉ์์ง์ ๋์ฑ ๊ฐ๋ ฅํ ์๋ ์ฆ๋ช ๊ฒ์์ ํตํด ๊ฐ๋ฐ์์ ์๋ ๋ถ๋ด์ ์ค์ ๋๋ค.
- ์ ์ง์ ํ์ ์ง์ : ์ฃผ๋ฅ ์ธ์ด์ ์ ํ์ ์์กด ํ์ ์ด ํตํฉ๋์ด ๊ฐ๋ฐ์๊ฐ ์ ์ฒด ์ฌ์์ฑ ์์ด ์ฝ๋๋ฒ ์ด์ค์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์๋ง ์ด ์๊ฒฉํจ์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ๊ต์ก: ์ด๋ฌํ ๊ฐ๋ ์ด ๋์ฑ ์ฃผ๋ฅ๊ฐ ๋จ์ ๋ฐ๋ผ ์ปดํจํฐ ๊ณผํ ์ปค๋ฆฌํ๋ผ์์ ๋ ์ผ์ฐ ์๊ฐ๋์ด ์ฆ๋ช ์ธ์ด์ ๋ฅํตํ ์๋ก์ด ์ธ๋์ ์์ง๋์ด๋ฅผ ๋ง๋ค ๊ฒ์ ๋๋ค.
์์ํ๊ธฐ: ํ์ ์ํ์ผ๋ก์ ์ฌ์
์ฆ๋ช ํ์ ์์ ์ฑ์ ํ์ ๊ด์ฌ์ด ์๋ค๋ฉด ๋ค์์ ์ฌ์ ์ ์์ํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ๋จ๊ณ์ ๋๋ค.
- ๊ฐ๋ ๋ถํฐ ์์ํ์ญ์์ค: ์ธ์ด์ ๋ฐ์ด๋ค๊ธฐ ์ ์ ํต์ฌ ์์ด๋์ด๋ฅผ ์ดํดํ์ญ์์ค. ์ปค๋ฆฌ-ํ์๋ ๋์๊ณผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ ์ฌํญ(๋ถ๋ณ์ฑ, ์์ ํจ์)์ ๋ํด ์ฝ์ด๋ณด์ญ์์ค.
- ์ค์ฉ์ ์ธ ์ธ์ด๋ฅผ ์ฌ์ฉํด ๋ณด์ญ์์ค: Idris๋ ํ๋ก๊ทธ๋๋จธ์๊ฒ ํ๋ฅญํ ์์์ ์ ๋๋ค. Edwin Brady์ ์ฑ "Type-Driven Development with Idris"๋ ์ค์ต์ ์ธ ํ์์ ์ธ ์๊ฐ์ ๋๋ค.
- ๊ณต์ ๊ธฐ๋ฐ ํ์: ์ฌ์ธต ์ด๋ก ์ ๊ด์ฌ์ด ์๋ ์ฌ๋๋ค์ ์ํด ์จ๋ผ์ธ ์์ ์๋ฆฌ์ฆ "Software Foundations"๋ Coq๋ฅผ ์ฌ์ฉํ์ฌ ๋ ผ๋ฆฌ, ํ์ ์ด๋ก ๋ฐ ๊ณต์ ๊ฒ์ฆ์ ์๋ฆฌ๋ฅผ ์ฒ์๋ถํฐ ๊ฐ๋ฅด์นฉ๋๋ค. ์ ์ธ๊ณ ๋ํ์์ ์ฌ์ฉ๋๋ ๋์ ์ ์ด์ง๋ง ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๋ณด๋ ์๋ ๋ฆฌ์์ค์ ๋๋ค.
- ์ฌ๊ณ ๋ฐฉ์ ์ ํ: ํ์ ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ์ฃผ์ ์ค๊ณ ๋๊ตฌ๋ก ์๊ฐํ๊ธฐ ์์ํ์ญ์์ค. ๊ตฌํ ์ฝ๋๋ฅผ ํ ์ค๋ ์์ฑํ๊ธฐ ์ ์ ์ค์ค๋ก์๊ฒ ๋ฌผ์ด๋ณด์ญ์์ค. "๋ถ๋ฒ์ ์ธ ์ํ๋ฅผ ํํํ ์ ์๋๋ก ํ์ ์ ์ด๋ค ์์ฑ์ ์ธ์ฝ๋ฉํ ์ ์์ต๋๊น?"
๊ฒฐ๋ก : ๋ณด๋ค ์์ ์ ์ธ ๋ฏธ๋ ๊ตฌ์ถ
๊ณ ๊ธ ํ์ ์ํ์ ํ๋ฌธ์ ์ธ ํธ๊ธฐ์ฌ ๊ทธ ์ด์์ ๋๋ค. ์ํํธ์จ์ด ํ์ง์ ๋ํด ์๊ฐํ๋ ๋ฐฉ์์ ๊ทผ๋ณธ์ ์ธ ๋ณํ๋ฅผ ๋ํ๋ ๋๋ค. ๋ฒ๊ทธ๋ฅผ ์ฐพ์ ์์ ํ๋ ๋ฐ์์ ์ธ ์ธ๊ณ์์ ์ค๊ณ์ ์ ํํ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ถํ๋ ์ฌ์ ์๋ฐฉ์ ์ธ ์ธ๊ณ๋ก ์ฐ๋ฆฌ๋ฅผ ์ด๋์ํต๋๋ค. ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ์ก์๋ด๋ ์ค๋ ํํธ๋์ธ ์ปดํ์ผ๋ฌ๋ ๋ ผ๋ฆฌ์ ์ถ๋ก ์ ํ๋ ฅ์, ์ฆ ์ฐ๋ฆฌ์ ์ฃผ์ฅ์ด ์ ์ง๋๋์ง ๋ณด์ฅํ๋ ์ง์น ์ค ๋ชจ๋ฅด๊ณ ๊ผผ๊ผผํ ์ฆ๋ช ๊ฒ์ฌ๊ธฐ๋ก ๊ฒฉ์๋ฉ๋๋ค.
๊ด๋ฒ์ํ ์ฑํ๊น์ง์ ์ฌ์ ์ ๊ธธ๊ฒ ์ง๋ง ๋ชฉ์ ์ง๋ ๋ ์์ ํ๊ณ , ๋ ์์ ์ ์ด๋ฉฐ, ๋ ๊ฐ๋ ฅํ ์ํํธ์จ์ด๊ฐ ์๋ ์ธ์์ ๋๋ค. ์ฝ๋์ ์ฆ๋ช ์ ์ตํฉ์ ์์ฉํจ์ผ๋ก์จ ์ฐ๋ฆฌ๋ ๋จ์ํ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ ์คํ ํ์ํ ๋์งํธ ์ธ๊ณ์์ ํ์ค์ฑ์ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.